package com.dlc.shop.common.translate;


import com.aliyun.alimt20181012.models.TranslateGeneralResponse;
import com.aliyun.alimt20181012.models.TranslateImageResponse;
import com.aliyun.tea.*;
import lombok.extern.slf4j.Slf4j;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

@Slf4j
public class TranslateUtil {

    /**
     * <b>description</b> :
     * <p>使用AK&amp;SK初始化账号Client</p>
     * @return Client
     *
     * @throws Exception
     */
    public static com.aliyun.alimt20181012.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露，并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式，更多鉴权访问方式请参见：https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId("LTAI5tCAa4a8HmkjUAysfSDr")
                // 必填，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret("S9qhvH7ZSkOxjHd55o7SSOxP82THAa");
        // Endpoint 请参考 https://api.aliyun.com/product/alimt
        config.endpoint = "mt.cn-hangzhou.aliyuncs.com";
        return new com.aliyun.alimt20181012.Client(config);
    }

    /**
     *
     * @param imageUrl 源图片地址
     * @param sourceLanguage 源语言
     * @param targetLanguage 目标语言
     * @param field 翻译领域 general 通用 e-commerce 电商
     * @return String
     *
     * @throws Exception
     */
    public static String image(String imageUrl, String sourceLanguage, String targetLanguage,String field) throws Exception {
        com.aliyun.alimt20181012.Client client = TranslateUtil.createClient();
        com.aliyun.alimt20181012.models.TranslateImageRequest translateImageRequest = new com.aliyun.alimt20181012.models.TranslateImageRequest()
                .setImageUrl(imageUrl)
                .setSourceLanguage(sourceLanguage)
                .setTargetLanguage(targetLanguage)
                .setField(field);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            TranslateImageResponse translateImageResponse = client.translateImageWithOptions(translateImageRequest, runtime);
            if(translateImageResponse.getStatusCode() == 200){
                return translateImageResponse.getBody().getData().finalImageUrl;
            }
        } catch (TeaException error) {
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
           log.info(error.getMessage());
            // 诊断地址
           log.info(error.getData().get("Recommend")+"");
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
           log.info(error.getMessage());
            // 诊断地址
           log.info(error.getData().get("Recommend")+"");
            com.aliyun.teautil.Common.assertAsString(error.message);
        }
        return "Image Translate Error";
    }


    /**
     *
     * @param formatType 源文本格式  txt html
     * @param targetLanguage 目标语言
     * @param sourceLanguage 源语言
     * @param sourceText 源文本
     * @param scene 场景 商品标题（title），商品描述（description），商品沟通（communication），医疗（medical），社交（social)，金融（finance）
     * @return String
     *
     * @throws Exception
     */
    public static String text(String formatType, String targetLanguage, String sourceLanguage,String sourceText,String scene) throws Exception {
        com.aliyun.alimt20181012.Client client = TranslateUtil.createClient();
        com.aliyun.alimt20181012.models.TranslateGeneralRequest translateGeneralRequest = new com.aliyun.alimt20181012.models.TranslateGeneralRequest()
                .setFormatType(formatType)
                .setSourceLanguage(sourceLanguage)
                .setTargetLanguage(targetLanguage)
                .setSourceText(sourceText)
                .setScene(scene);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            TranslateGeneralResponse translateGeneralResponse = client.translateGeneralWithOptions(translateGeneralRequest, runtime);
            if(translateGeneralResponse.getStatusCode() == 200 && translateGeneralResponse.getBody().getCode() == 200){
                return translateGeneralResponse.getBody().getData().translated;
            }
            if (translateGeneralResponse.getBody().getCode() != 200){
                return translateGeneralResponse.getBody().getMessage();
            }


        } catch (TeaException error) {
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
           log.info(error.getMessage());
            // 诊断地址
           log.info(error.getData().get("Recommend")+"");
            com.aliyun.teautil.Common.assertAsString(error.message);
            return error.getMessage();
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
           log.info(error.getMessage());
            // 诊断地址
           log.info(error.getData().get("Recommend")+"");
            com.aliyun.teautil.Common.assertAsString(error.message);
            return error.getMessage();

        }
        return "Text Translate Error/翻译失败，重新输入！";
    }



    /**
     * 下载图片
     * @param imageUrl 图片地址
     * @param savePath 保存路径
     * @throws IOException
     */
    public static void downloadPicture(String imageUrl, String savePath) throws IOException {
        URL url = new URL(imageUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.connect();

        int responseCode = connection.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK) {
            BufferedInputStream in = new BufferedInputStream(connection.getInputStream());
            FileOutputStream out = new FileOutputStream(new File(savePath));

            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, bytesRead);
            }

            // 下载完成，关闭输入输出流
            in.close();
            out.close();
            connection.disconnect();

           log.info("图片下载成功，保存路径：" + savePath);
        } else {
           log.info("无法下载图片，响应码：" + responseCode);
        }
    }

//    public static void main(String[] args_) throws Exception {
//        java.util.List<String> args = java.util.Arrays.asList(args_);
//        com.aliyun.alimt20181012.Client client = TranslateImage.createClient();
//        com.aliyun.alimt20181012.models.TranslateGeneralRequest translateGeneralRequest = new com.aliyun.alimt20181012.models.TranslateGeneralRequest()
//                .setFormatType("text")
//                .setSourceLanguage("zh")
//                .setTargetLanguage("en")
//                .setSourceText("这是中国话")
//                .setScene("general")
//                .setContext("早上我在家里吃了面包");
//        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
//        try {
//            // 复制代码运行请自行打印 API 的返回值
//            TranslateGeneralResponse translateGeneralResponse = client.translateGeneralWithOptions(translateGeneralRequest, runtime);
//            if(translateGeneralResponse.getStatusCode() == 200 && translateGeneralResponse.getBody().getCode() == 200){
//               log.info(translateGeneralResponse.getBody().getData().translated);;
//            }
//
//
//        } catch (TeaException error) {
//            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
//            // 错误 message
//           log.info(error.getMessage());
//            // 诊断地址
//           log.info(error.getData().get("Recommend"));
//            com.aliyun.teautil.Common.assertAsString(error.message);
//        } catch (Exception _error) {
//            TeaException error = new TeaException(_error.getMessage(), _error);
//            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
//            // 错误 message
//           log.info(error.getMessage());
//            // 诊断地址
//           log.info(error.getData().get("Recommend"));
//            com.aliyun.teautil.Common.assertAsString(error.message);
//        }
//    }
}
